package com.itheima.controller;

import com.itheima.anno.Log;
import com.itheima.pojo.*;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
员工管理的控制器
 */
@RequestMapping("/emps")
@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;
    //原始方式实现分页查询请求参数比较多，不方便，所以使用对象接收请求参数
//    @GetMapping//defaultValue设置默认值
//    public Result page(@RequestParam(defaultValue = "1") Integer page,
//                       @RequestParam(defaultValue = "10") Integer pageSize,
//                       String name, Integer gender,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate begin,
//                       @DateTimeFormat(pattern = "yyyy-MM-dd")LocalDate end)
//    //@DateTimeFormat(pattern = "yyyy-MM-dd")用于将前端传递的字符串类型的日期转换为LocalDate类型
//    //yyyy-MM-dd指定日期格式
//    {
//        log.info("查询员工信息，{},{},{},{},{},{}", page, pageSize,name,gender,begin,end);
//        PageResult<Emp> pageResult = empService.page(page, pageSize,name,gender,begin,end);
//        return Result.success(pageResult);
//
//    }


    //请求参数太多定义一个实体类，来封装这几个请求参数需要保证，要注意前端传递的请求参数和实体类的属性名得是一样的
    //查询员工信息有条件的分页
    @GetMapping//defaultValue设置默认值
    public Result page(EmpQueryParam empQueryParam)
    //@DateTimeFormat(pattern = "yyyy-MM-dd")用于将前端传递的字符串类型的日期转换为LocalDate类型
    //yyyy-MM-dd指定日期格式
    {
        log.info("查询员工信息，{}", empQueryParam);
        PageResult<Emp> pageResult = empService.page(empQueryParam);
        return Result.success(pageResult);

    }

    //添加员工
    @Log
    @PostMapping//这里为什么用RequestBody注解因为需要将前端的json格式的数据封装到emp对象的属性中
    public Result save(@RequestBody Emp emp){
        log.info("请求参数emp:{}",emp);
        empService.save(emp);
        return Result.success();

    }


    //2.6 查询全部员工无条件
    @GetMapping("/list")
    public Result list(){
        log.info("查询全部员工信息");
        List<Emp> emps = empService.Getlist();
        return Result.success(emps);

    }

    //批量删除员工包含了删除单个员工
    @Log
    @DeleteMapping
    public Result delete(@RequestParam List<Integer> ids)
    //可以通过数组或者集合接收前端传递的多个id推荐使用集合因为集合操作其中的元素会更加方便。
    {
        //asList方法将数组转换为集合 info第二个参数是一个集合
        ///log.info("批量删除部门: ids={} ", Arrays.asList(ids));
        log.info("批量删除部门: ids={} ", ids);
        empService.deleteByIds(ids);
        return Result.success();
    }

    //修改员工信息
    //1.根据ID查询员工信息 查询回显
    @Log
    @GetMapping("/{id}")
    public Result getInfo(@PathVariable Integer id){
        log.info("根据id查询员工的详细信息");
        Emp emp = empService.GetInfo(id);
        return Result.success(emp);
    }
    //2.保存修改的员工信息 更新
    @Log
    @PutMapping
    public Result update(@RequestBody Emp emp){

        log.info("修改员工信息,{}", emp);
        empService.update(emp);
        return Result.success();

    }



}
